package com.cy.mall.service.message.impl;

import com.cy.mall.comm.annotation.Message;
import com.cy.mall.comm.constant.Constants;
import com.cy.mall.comm.utils.CommonUtils;
import com.cy.mall.comm.utils.JsonObjectMapper;
import com.cy.mall.model.dto.message.OrderStatusNotificationMessageDTO;
import com.cy.mall.model.dto.wechat.WechatMessageTemplateDTO;
import com.cy.mall.model.dto.wechat.WechatMessageTemplateDataDTO;
import com.cy.mall.model.enums.MessageType;
import com.cy.mall.model.enums.wechat.WechatMessageTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description 还款提醒 消息通知
 * @Author tanyilin
 * @Date 2019/8/12 15:24
 */
@Slf4j
@Message(type = MessageType.REPAYMENT_REMIND)
@Service
public class RepaymentRemindMessageImpl extends MessageServiceImpl {

    /**
     * 还款提醒消息通知执行方法
     * @param message
     * @return void
     */
    public void execute(String message) {

        //订单第三方唯一编号 thirdLoanId
        String thirdLoanId = message;
        //查询发送微信消息的订单相关参数
        OrderStatusNotificationMessageDTO template = orderMapper.selectOrderStatusNotificationMessageDTO(thirdLoanId);
        if(template != null && !"dev".equals(Constants.PROFILES_ACTIVE)) {
            //发送微信消息
            sendWechatMessageTemplate(template);
        }
    }

    /**
     * 发送微信消息模板
     * @param template
     * @return void
     */
    private void sendWechatMessageTemplate(OrderStatusNotificationMessageDTO template) {

        if(template.getOpenId() == null) {
            log.info("订单[orderId={}，loanId={}]还款提醒，由于客户没有绑定微信，无法发送微信消息。", template.getOrderId(), template.getThirdLoanId());
            return;
        }

        if(CommonUtils.isEmpty(template.getLoanTime())) {
            log.info("订单[orderId={}，loanId={}]还款提醒，放款时间为空，无法发送微信消息。", template.getOrderId(), template.getThirdLoanId());
            return;
        }

        //封装参数map
        WechatMessageTemplateDataDTO first = new WechatMessageTemplateDataDTO();
        first.setValue("您好， 您家具分期本期借款即将临近还款日，提醒您及时保证您的银行卡余额充足，留意扣款情况。如您已还款，可忽略本条信息。");

        //银行名称
        WechatMessageTemplateDataDTO keyword1 = new WechatMessageTemplateDataDTO();
        keyword1.setValue(template.getBankName());

        //银行卡号
        WechatMessageTemplateDataDTO keyword2 = new WechatMessageTemplateDataDTO();
        keyword2.setValue(template.getBankReceiveAcct());

        //持卡人
        WechatMessageTemplateDataDTO keyword3 = new WechatMessageTemplateDataDTO();
        keyword3.setValue(template.getBankCardHolder());

        //最后还款日
        String monthlyRepayDate = CommonUtils.dateFormat3(template.getLoanTime()).substring(6, 8);
        WechatMessageTemplateDataDTO keyword4 = new WechatMessageTemplateDataDTO();
        keyword4.setValue("每月 " + monthlyRepayDate + " 日");

        WechatMessageTemplateDataDTO remark = new WechatMessageTemplateDataDTO();
        remark.setValue("请您在还款日前及时充值金额到上述银行卡，以便代扣还款，您也可以点击本消息发起主动还款。");

        Map<String, WechatMessageTemplateDataDTO> data = new HashMap<>();
        data.put("first", first);
        data.put("keyword1", keyword1);
        data.put("keyword2", keyword2);
        data.put("keyword3", keyword3);
        data.put("keyword4", keyword4);
        data.put("remark", remark);

        WechatMessageTemplateDTO wechatMessageTemplateDTO = new WechatMessageTemplateDTO();
        wechatMessageTemplateDTO.setOpneId(template.getOpenId());
        wechatMessageTemplateDTO.setTemplateId(WechatMessageTemplate.REPAYMENT_REMIND.getTemplateId());
        wechatMessageTemplateDTO.setUrl(appHomePage);
        wechatMessageTemplateDTO.setData(data);

        log.info("wechatMessageTemplateDTO = [{}]", JsonObjectMapper.toJson(wechatMessageTemplateDTO));

        //发送微信消息模板
        wechatService.sendTemplateMessage(wechatMessageTemplateDTO);

    }

}
